package com.sdweizan.sdk.bytedance.config;

import com.sdweizan.sdk.bytedance.bean.oauth2.BdAccessTokenResponse;

import java.util.concurrent.locks.Lock;

public interface BdConfigStorage {
  /**
   * Gets access token.
   *
   * @return the access token
   */
  String getAccessToken();

  /**
   * Gets access token.
   *
   * @return the access token
   */
  String getOpenAccessToken();

  /**
   * Gets access token lock.
   *
   * @return the access token lock
   */
  Lock getAccessTokenLock();

  /**
   * 获取访问令牌锁
   *
   * @return the access token lock
   */
  Lock getOpenAccessTokenLock();

  /**
   * Is access token expired boolean.
   *
   * @return the boolean
   */
  boolean isAccessTokenExpired();

  /** 强制将access token过期掉. */
  void expireAccessToken();

  /**
   * 应该是线程安全的.
   *
   * @param accessToken 要更新的WxAccessToken对象
   */
  void updateAccessToken(BdAccessTokenResponse accessToken);

  /**
   * 应该是线程安全的.
   *
   * @param accessToken 新的accessToken值
   * @param expiresInSeconds 过期时间，以秒为单位
   */
  void updateAccessToken(String accessToken, int expiresInSeconds);

  /**
   * 小程序令牌是否过期
   *
   * @return
   */
  boolean isOpenAccessTokenExpired();

  /** 强制将小程序令牌过期掉. */
  void expireOpenAccessToken();

  /**
   * 更新
   *
   * @param openAccessToken 要更新的openAccessToken对象
   */
  void updateOpenAccessToken(BdAccessTokenResponse openAccessToken);

  /**
   * 应该是线程安全的.
   *
   * @param openAccessToken 新的openAccessToken值
   * @param expiresInSeconds 过期时间，以秒为单位
   */
  void updateOpenAccessToken(String openAccessToken, int expiresInSeconds);

  /**
   * Gets app id.
   *
   * @return the app id
   */
  String getAppId();

  /**
   * Gets secret.
   *
   * @return the secret
   */
  String getSecret();

  /**
   * Gets token.
   *
   * @return the token
   */
  String getToken();

  /**
   * Gets aes key.
   *
   * @return the aes key
   */
  String getAesKey();

  /**
   * Gets salt.
   *
   * @return the salt
   */
  String getSalt();

  /**
   * Gets expires time.
   *
   * @return the expires time
   */
  long getExpiresTime();

  /** http 请求重试间隔 */
  int getRetrySleepMillis();

  /** http 请求最大重试次数 */
  int getMaxRetryTimes();

  /**
   * 是否自动刷新token.
   *
   * @return the boolean
   */
  boolean isAutoRefreshToken();

  /***
   * 获取平台公钥
   */
  String getPlatformPublicKey();

  /***
   * 获取应用私钥
   */
  String getAppPrivateKey();
}
